1 /*
2 Java Regular Expressions Plugin API
3
4 Copyright (C) 2002 Jose San Leandro Armend?riz
5 jsanleandro@yahoo.es
6 chousz@yahoo.com
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
22 Thanks to ACM S.L. for distributing this library under the LGPL license.
23 Contact info: jsr000@terra.es
24 Postal Address: c/Playa de Lagoa, 1
25 Urb. Valdecaba?as
26 Boadilla del monte
27 28660 Madrid
28 Spain
29
30 This library uses some external APIs. So far I haven't released such
31 APIs as projects themselves, but you should be able
32 to download them from the web page where you got this source code.
33
34 ******************************************************************************
35 *
36 * Filename: $RCSfile: Perl5CompilerOROAdapter.java,v $
37 *
38 * Author: Jose San Leandro Armend?riz
39 *
40 * Description: Jakarta ORO-specific regexp compiler adapter. This class makes
41 * possible the use of ORO compilers inside this API. A delegation
42 * is used because Perl5Compiler is a final class.
43 *
44 * Last modified by: $Author: dev $ at $Date: 2002/09/27 08:27:16 $
45 *
46 * File version: $Revision: 1.12 $
47 *
48 * Project version: $Name: $
49 * ("Name" means no concrete version has been checked out)
50 *
51 * $Id: Perl5CompilerOROAdapter.java,v 1.12 2002/09/27 08:27:16 dev Exp $
52 *
53 */
54 package org.acmsl.regexpplugin.jakartaoro;
55
56 /*
57 * Importing project-specific classes.
58 */
59 import org.acmsl.regexpplugin.Compiler;
60 import org.acmsl.regexpplugin.Pattern;
61
62 /*
63 * Importing some ACM classes.
64 */
65 import org.acmsl.version.Version;
66 import org.acmsl.version.VersionFactory;
67
68 /*
69 * Importing ORO classes.
70 */
71 import org.apache.oro.text.regex.MalformedPatternException;
72 import org.apache.oro.text.regex.Perl5Compiler;
73
74 /***
75 * Jakarta ORO-specific regexp compiler adapter. This class makes possible the
76 * use of ORO compilers inside this API. A delegation is used because
77 * Perl5Compiler is a final class.
78 * @author <a href="mailto:jsanleandro@yahoo.es"
79 >Jose San Leandro Armend?riz</a>
80 * @version $Revision: 1.12 $
81 */
82 public class Perl5CompilerOROAdapter
83 implements Compiler
84 {
85 /***
86 * Delegated instance.
87 */
88 private Perl5Compiler m__Instance;
89
90 /***
91 * Case sensitiveness.
92 */
93 private boolean m__bCaseSensitive;
94
95 /***
96 * Multiline parsing.
97 */
98 private boolean m__bMultiline;
99
100 /***
101 * Compiles given regular expression and creates a Pattern object to
102 * apply such rule on concrete text contents.
103 * @param regexp the regular expression to compile.
104 * @return the Pattern associated to such regular expression.
105 * @throws MalformedPatternException if given regexp is malformed.
106 */
107 public Pattern compile(String regexp)
108 throws org.acmsl.regexpplugin.MalformedPatternException
109 {
110 Pattern result = null;
111
112 try
113 {
114 Perl5Compiler t_Compiler = getDelegatedInstance();
115
116 int t_iOptions = Perl5Compiler.DEFAULT_MASK;
117
118 t_iOptions |=
119 (isCaseSensitive())
120 ? 0
121 : Perl5Compiler.CASE_INSENSITIVE_MASK;
122
123 t_iOptions |=
124 (isMultiline())
125 ? Perl5Compiler.MULTILINE_MASK
126 : Perl5Compiler.SINGLELINE_MASK;
127
128 result =
129 new PatternOROAdapter(
130 t_Compiler.compile(
131 regexp,
132 t_iOptions));
133 }
134 catch (org.apache.oro.text.regex.MalformedPatternException
135 malformedPatternException)
136 {
137 throw
138 new MalformedPatternExceptionOROAdapter(
139 malformedPatternException);
140 }
141 catch (IllegalArgumentException illegalArgumentException)
142 {
143 if (resetOptions())
144 {
145 result = compile(regexp);
146 }
147 }
148
149 return result;
150 }
151
152 /***
153 * Resets the compiler options.
154 * @return true if the options actually changed.
155 */
156 private boolean resetOptions()
157 {
158 boolean result = false;
159
160 result =
161 ( (isCaseSensitive())
162 || (isMultiline()));
163
164 setCaseSensitive(false);
165
166 setMultiline(false);
167
168 return result;
169 }
170
171 /***
172 * Retrieves an instance of Perl5Compiler class.
173 * @return a new (or already existing) compiler.
174 */
175 protected Perl5Compiler getDelegatedInstance()
176 {
177 Perl5Compiler result = m__Instance;
178
179 if (m__Instance == null)
180 {
181 setAdaptee(new Perl5Compiler());
182
183 result = m__Instance;
184 }
185
186 return result;
187 }
188
189 /***
190 * Sets the adaptee.
191 * @param adaptee the compiler to adapt.
192 */
193 protected void setAdaptee(Perl5Compiler adaptee)
194 {
195 m__Instance = adaptee;
196 }
197
198 /***
199 * Sets whether the compiler should care about case sensitiveness
200 * or not.
201 * @param caseSensitive true for differentiate upper from lower case.
202 */
203 public void setCaseSensitive(boolean caseSensitive)
204 {
205 m__bCaseSensitive = caseSensitive;
206 }
207
208 /***
209 * Retrieves whether the compiler should care about case sensitiveness
210 * or not.
211 * @return true if upper from lower cases are processed differently.
212 */
213 public boolean isCaseSensitive()
214 {
215 return m__bCaseSensitive;
216 }
217
218 /***
219 * Sets whether the compiler should care about new line delimiters
220 * or not.
221 * @param multiline false for parsing each line at a time.
222 */
223 public void setMultiline(boolean multiline)
224 {
225 m__bMultiline = multiline;
226 }
227
228 /***
229 * Sets whether the compiler should care about new line delimiters
230 * or not.
231 * @return false if the engine parses each line one at a time.
232 */
233 public boolean isMultiline()
234 {
235 return m__bMultiline;
236 }
237
238 /***
239 * Concrete version object updated everytime it's checked-in in a CVS
240 * repository.
241 */
242 public static final Version VERSION =
243 VersionFactory.createVersion("$Revision: 1.12 $");
244
245 /***
246 * Retrieves the current version of this object.
247 * @return the version object with such information.
248 */
249 public Version getVersion()
250 {
251 return VERSION;
252 }
253
254 /***
255 * Retrieves the current version of this class.
256 * @return the object with class version information.
257 */
258 public static Version getClassVersion()
259 {
260 return VERSION;
261 }
262 }
This page was automatically generated by Maven